/*
	created time:2018/4/12
	author:Chason
	describe:出牌(按钮)
*/
class PlayCard extends eui.Component{
	public constructor() {
		 super();
		 this.skinName = "playCard";
	}
	private  stageWidth=egret.MainContext.instance.stage.stageWidth;
	private  stageHeight=egret.MainContext.instance.stage.stageHeight;

	//初始化X--最初刚开始的位置
    public initX:number=this.stageWidth/2;
	//和其他按钮一起的位置
	public otherX:number=this.stageWidth/2+71;
	//出牌后的Y值
	public  outCardY:number=this.stageHeight-300;
	//已经出牌的扑克数组
	public outCardArr=[];

	protected childrenCreated(): void {
        super.childrenCreated();
        this.init();
    }
	public init():void{
		this.touchEnabled=true;
		this.y=Basic.meBtnInitY(this.stageHeight);
		this.x=this.initX;
		this.anchorOffsetX=61;
		this.anchorOffsetY=25;
		Basic.touchScaleBtn(this);
	}

    /*
		添加出牌按钮监听事件
		{
			obj.arr   本玩家数组
			obj.self  游戏的类容器

		}
	*/
    public  addEvent(obj):void{
		PlayCard.getInstance().addEventListener(egret.TouchEvent.TOUCH_TAP,()=>{		
			let arr=[];
			for(let i=0;i<obj.arr.length;i++){
				if(obj.arr[i].selected && !obj.arr[i].isOut){
					arr.push(obj.arr[i]);
				}
			}
			let result=Algorithm.cardRule(arr);
			if(!result){return false}
			//符合出牌规则,判断上一次的出牌
			if(!obj.self.prevBCard){
				//没有牌就直接出牌
				this.setOutCard(obj);
				//本玩家出牌后，轮到其他人出牌
				Scene.passGame.otherPlay();
			}else{
				//比大小
				alert("先比大小")

			}
			console.log(result)
		},this);
	}


    /*
		符合出牌执行的函数
		遍历设置Y值和X值.
		arr:卡牌数组
		self:卡牌父容器
	*/
	public  setOutCard(obj):void{
		let arr=obj.arr;//扑克数组
		//先删除已经出牌的扑克
		for(let i=0;i<this.outCardArr.length;i++){							
			if(this.outCardArr[i].parent){
				//删除数组中已经被标识为"已出牌"的扑克
				this.outCardArr[i].parent.removeChild(this.outCardArr[i]);
				//删除后重置
				this.outCardArr=[];
			}	
		}
		//出牌
		for(let i=0;i<arr.length;i++){
			if(arr[i].selected && arr[i].parent){			
					arr[i].isOut=true;
					this.outCardArr.push(arr[i]);
					arr[i].parent.removeChild(arr[i]);		
					arr.splice(i,1);		
					i--;
			}
		}
		//将本次出牌保存到游戏类中
		obj.self.prevMeCard=this.outCardArr;
		//重置和显示已经出牌的扑克
		this.resetOutCardPosition(obj.self.gameWrap);	
		//调整手中卡牌的位置动画	
		this.resetCardPosition(arr);
	}
   
   /*
   		调整出牌后的位置和动画
   */
	public resetCardPosition(arr):void{
		 //调整手中卡牌的动画
		 for(let i=0;i<arr.length;i++){
				//设置扑克数组的中间值
				let meArrCenterNum=Math.round((arr.length-1)/2);
				for(let i=0;i<arr.length;i++){
						//调整扑克
						if(i==meArrCenterNum){
							let tw = egret.Tween.get(arr[i] );
							tw.to({x:this.stageWidth/2},500,egret.Ease.backOut)
						}else if(i<meArrCenterNum){
							let tw = egret.Tween.get(arr[i] );
							tw.to({x:this.stageWidth/2-(meArrCenterNum-i)*45},500,egret.Ease.backOut)
						}else{
							let tw = egret.Tween.get( arr[i] );
							tw.to({x:this.stageWidth/2+(i-meArrCenterNum)*45},500,egret.Ease.backOut)
						}
				}		
		 }
	}

	/*
		调整和显示已经出牌的扑克
	*/
	public resetOutCardPosition(wrap){
		let outCardArr=this.outCardArr;
		for(let i in outCardArr){
			//设置扑克数组的中间值
			let meArrCenterNum=Math.round((outCardArr.length-1)/2);
			for(let i=0;i<outCardArr.length;i++){
				outCardArr[i].y=this.outCardY;
				outCardArr[i].scaleX=0.8;
				outCardArr[i].scaleY=0.8;
				//调整扑克
				if(i==meArrCenterNum){
					let tw = egret.Tween.get(outCardArr[i] );
					tw.to({x:this.stageWidth/2},10,egret.Ease.backOut)
				}else if(i<meArrCenterNum){
					let tw = egret.Tween.get(outCardArr[i] );
					tw.to({x:this.stageWidth/2-(meArrCenterNum-i)*45},10,egret.Ease.backOut)
				}else{
					let tw = egret.Tween.get( outCardArr[i] );
					tw.to({x:this.stageWidth/2+(i-meArrCenterNum)*45},10,egret.Ease.backOut)
				}
			}	
			wrap.addChild(this.outCardArr[i]);
		}
	}


	//单例模式
	public static PlayCard:PlayCard;
	public static getInstance():PlayCard{	
		if(!this.PlayCard){
			this.PlayCard=new PlayCard();
		}
		return this.PlayCard;
	}

}